GETPAGESIZE(2) | Linux Programmer's Manual | GETPAGESIZE(2) |
名前¶
getpagesize - メモリのページ・サイズを取得する
書式¶
#include <unistd.h>
int getpagesize(void);
glibc
向けの機能検査マクロの要件
(feature_test_macros(7) 参照):
getpagesize(): _BSD_SOURCE || _XOPEN_SOURCE >= 500
説明¶
getpagesize() 関数はページの大きさをバイト数で返す。ここでの「ページ」は mmap(2) の説明の中で使用されているもので、 mmap() はこのページサイズの単位でファイルをマップする。
mmap(2) が使用するページサイズは以下のようにして知ることができる。
#include <unistd.h> long sz = sysconf(_SC_PAGESIZE);
(ほとんどのシステムでは _SC_PAGESIZE の同義語として _SC_PAGE_SIZE を使用することができる)、もしくは以下のようにする:
#include <unistd.h> int sz = getpagesize();
準拠¶
SVr4, 4.4BSD, SUSv2. SUSv2 では getpagesize() システムコールは「過去の遺物 (LEGACY)」とされており、 POSIX.1-2001 からは外されている。 HP-UX にはこのシステムコールは存在しない。 移植性が必要なアプリケーションでは、このシステムコールの代わりに sysconf(_SC_PAGESIZE) を利用すべきである。
注意¶
getpagesize() が Linux のシステムコールとして存在するかどうかは、そのアーキテクチャに 依存している。 システムコールとして存在する場合には、カーネルシンボルの PAGE_SIZE を返す。 PAGE_SIZE の値は、アーキテクチャとマシンモデルに依存する。 一般に、バイナリは、アーキテクチャごとに1つのバイナリ配布で済ませるために、 アーキテクチャには依存しているがマシンモデルには依存していない。 つまり、ユーザプログラムはコンパイル時にヘッダーファイルから PAGE_SIZE を見つけて使用すべきではない。 少なくとも、マシンモデルについても依存性が存在する (sun4 のような) アーキテクチャにおいては本物のシステムコールを使用する必要がある。 尚、 libc4, libc5, glibc 2.0 では、 getpagesize() がシステム・コールを使用せず、固定の値を返すために、この方法は 失敗する。glibc 2.1 では大丈夫である。
関連項目¶
2007-07-26 | Linux |